Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

12 Stron V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> Pager (stronicowanie), klasa, php4 i php5
AxZx
post
Post #81





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


Cytat(nasty_psycho @ 24.08.2006, 15:02 ) *
O co ci chodzi ? bo nie bardzo lapie ? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


o to :

Cytat(bigZbig @ 24.08.2006, 09:34 ) *
Trzeba jedynie rozumiec idee OOP i umiec pisac do interfejsu.
Go to the top of the page
+Quote Post
nospor
post
Post #82





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nie mam zielonego pojęcia jak to ze smarty połączyć

W wersji 2.01 przy wywolaniu metody Render() ustaw 3 parametr na true, to ci zwroci tablice. Te tablice se assign na smarty i w smarty generuj pager.
Albo wywolaj normalnie Render() zwroci ci kod html i ten kod html assign do smarty i go tylko tam wyswietlisz:)

Cytat
W ogóle nie kapuje stronicowania
No stronicowanie polega na dzieleniu na informacji na stronie. Tak jak tu w topicu. zamiast wyswietlic 100 postow na raz, to wyswietlane jest kawalkami po 20 postow. Ot i cala filozofia
Go to the top of the page
+Quote Post
Lee
post
Post #83





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


co to jest stronicowanie to wiemi jak to dziala (ze jest strona 1 i tam pierwsze 20 rekordów, strona 2 i kolejne 20 rekordów) ale nie wiem jak to napisac :|

btw. ale co z tymi plikami które trzeba zaincludować ? tylko Pager.class.php czy wszystkie ?
Go to the top of the page
+Quote Post
nospor
post
Post #84





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
ale nie wiem jak to napisac
Nie wiesz jak napisac od poczatku, czy jak wykorzystac moją klase? Jak to drugie to przyklady przeciez podalem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Cytat
ale co z tymi plikami które trzeba zaincludować ? tylko Pager.class.php czy wszystkie ?
Tylko Pager.class.php. Reszta plikow to przyklady jak uzywac
Go to the top of the page
+Quote Post
Lee
post
Post #85





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


Trzeci parametr ?
  1. <?php
  2. public function __construct($id, $pageLink = '')
  3. ?>

tutaj nie ma miejsca na 3 parametr :| a nawet jak jest to co mam wpisać jako drugi ? bo przy wywołaniu podane jest (1 post w tym temacie)
  1. <?php
  2. $pager = new Pager('idPagera');
  3. ?>
Go to the top of the page
+Quote Post
AxZx
post
Post #86





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


3 parametr metody render
Go to the top of the page
+Quote Post
Lee
post
Post #87





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


No to teraz kompletnie nic nie rozumiem (IMG:http://forum.php.pl/style_emoticons/default/sleep.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #88





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Lee chlopie, olej tablice, bo dla dziebie to za wysoki poziom abstrakcji. Nie chce cie tym obrazic ino dac do zrozumienia bys narazie tablice olal (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Przejrzyj przyklady co są zalączone.

Specjalnie dla Ciebie kod pod Smarty:
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from TABLE';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordów
  7. try{
  8. $pager = new Pager('idPagera');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pag = $pager->Render(true);
  11. $start = $pager->GetIndexRecordStart();
  12. $end = $pager->GetIndexRecordEnd();
  13. }
  14. catch (Exception $e) {
  15. echo $e->getMessage();
  16. }
  17.  
  18. //zapytanie z uwzglenieniem stronicowania
  19. $sql = 'select * from TABLE limit '.$start.','.($end - $start + 1);
  20. //...pobranie wyników i ich wyswietlenie
  21.  
  22. //tu gdzies tworzysz sobie smarty
  23.  
  24. //przypisanie do smarty
  25. $smarty->assign('pager', $pag);
  26. ?>


kod smarty:
Kod
{$pager}


Oczywiscie rekordy tez mozesz przypisac do smartiego, ale nie musisz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Lee
post
Post #89





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


Nie obraziłem się, bo sam stwierdzam że jestem tępy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) "Przerobiłem" ten kod co podałes, ale trochu koślawo, bo mam 8 wpisów w bazie danych i ustawiłem sobie ze ma mi wyswietlać 4 ale to wyświetla mi tak
8 wpis | 8 wpis
8 wpis | 8 wpis
1 wpis | 5 wpis
2 wpis | 6 wpis
3 wpis | 7 wpis
4 wpis | 8 wpis
Kreska | oznacza, po przełączeniu na następną strone
kod wygląda tak
  1. <?php
  2. require_once('Pager.class.php');
  3. $sql = 'select count(*) from '.$tbl_guestbook.'';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];
  7. try{
  8. $pager = new Pager('idPagera');
  9. $pager->SetTotalRecords($recordsCount);
  10. $pag = $pager->Render(true);
  11. $start = $pager->GetIndexRecordStart();
  12. $end = $pager->GetIndexRecordEnd();
  13. }
  14. catch (Exception $e) {
  15. echo $e->getMessage();
  16. }
  17.  
  18. $sql = 'select * from '.$tbl_guestbook.' limit '.$start.','.($end - $start + 1);
  19. $query = mysql_query($sql);
  20. while ($result = mysql_fetch_assoc($query)){
  21. $row[] = $result;
  22. }
  23. $smarty->assign('pager', $pag);
  24. $smarty -> assign('entry', $row);
  25. ?>

a wywołuje go tak
  1. {foreach from=$entry item=entry}
  2. {$entry.title} :: {$entry.author}
  3. {/foreach}
  4. {$pager}

tak wiem tępy jestem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nospor
post
Post #90





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
ustawiłem sobie ze ma mi wyswietlać 4 ale to wyświetla mi tak
W kodzie co pokazales nie widze by tak bylo. BRakuje SetRecordsPerPage
  1. <?php
  2. //....
  3. $pager->SetRecordsPerPage(4);
  4. $pag = $pager->Render(true);
  5. //.....
  6. ?>


Pozatym w smarty nadajesz taką samą nazwe dla item co zmienna. nie jestem pewien czy to sie nie gryzie. Daj tak:
Kod
{foreach from=$entry item=row}
{$row.title} :: {$row.author}
{/foreach}
{$pager}


Jakby nadal nie dzialalo, to wal na PW. Szkoda tu topic "zasmiecac" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

edit: a juz wiem. robisz $row[] =....
ale wczesniej $row ma pewne dane. Musisz przed petla zresetowac $row:
  1. <?php
  2. //.....
  3. $row = array();
  4. while ($result = mysql_fetch_assoc($query)){
  5. $row[] = $result;
  6. }
  7. //.....
  8. ?>
Go to the top of the page
+Quote Post
Lee
post
Post #91





Grupa: Zarejestrowani
Postów: 319
Pomógł: 0
Dołączył: 11.04.2006
Skąd: Chojnów

Ostrzeżenie: (0%)
-----


No fakt jest row, ale przed chwilą miałem wysłac do Ciebie PW że już rozwiązałem. Jednak ja to rozwiązałem zmieniając $row[] as $entry[]

Dzięki za fatygę Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tomick_pl
post
Post #92





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.09.2006

Ostrzeżenie: (0%)
-----


Hmmm... zauważyłem złe generowanie linków odpowiedzialnych za przeskoczenie o X stron. Swoje twierdzenie opieram na przykładzie ex_with_array dołączonym do paczki z klasą. Otóż: na stronie 4 jest dostępny link przeskoczenia do tyłu o.... 5 pozycji... czyli do strony "-1" tak samo się dzieje jak na stronie 22 możemy przejść do strony 27 (a jest tylko 25 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ). Ja to sobie tak naprawiłem zmieniając kilka linijek metody _toArray:

  1. <?php
  2. if ($this->_indexPageStart > 1) {
  3. $this->_array[self::_GOTO_FIRST_] = 1;
  4. $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  5. }
  6. ?>


na:

  1. <?php
  2. if ($this->_indexPageStart > 1) {
  3. $this->_array[self::_GOTO_FIRST_] = 1;
  4.  #$this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  5. }
  6. if ($this->_actualPage > 5) { // link pojawiał się już na stronie 4 (4-5=-1) na stronie 5 też go nie powinno być (5-5=0) - czyli powinien być na stronach 6 i większych
  7. $this->_array[self::_GOTO_PREV_X_] = $this->_actualPage - $this->_pagesPerNav;
  8. }
  9. ?>


oraz to:

  1. <?php
  2. if ($this->_indexPageEnd < $this->_totalPages) {
  3.  $this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav;
  4.  $this->_array[self::_GOTO_LAST_] = $this->_totalPages;
  5. }
  6. ?>


na:

  1. <?php
  2. if ($this->_indexPageEnd < $this->_totalPages) {
  3.  #$this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav;
  4.  $this->_array[self::_GOTO_LAST_] = $this->_totalPages;
  5. }
  6.  
  7. if ($this->_indexPageEnd+($this->_pagesPerNav/2) <= $this->_totalPages) {
  8.  $this->_array[self::_GOTO_NEXT_X_] = $this->_actualPage + $this->_pagesPerNav;
  9. }
  10. ?>


No chyba, że jednak klasa działa normalnie w innych warunkach - to przepraszam w takim razie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

EDIT:
Poprawiłem ostatni kod w tym poście- nie działał tak, jak chciałem

Ten post edytował tomick_pl 16.09.2006, 11:59:05
Go to the top of the page
+Quote Post
AxZx
post
Post #93





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


tez to zauwazylem, ale gdy przeskoczysz na 27 ktorej nie ma to i tak wyswietli sie ostatnia strona 25.
Go to the top of the page
+Quote Post
tomick_pl
post
Post #94





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.09.2006

Ostrzeżenie: (0%)
-----


No tak, ale ja nie lubię takich małych bugów- faktycznie wyświetli się ostatnia (lub pierwsza) strona, ale zawsze jakoś tak drażni (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Poza tym raczej taki zabieg nie wpłynie na szybkość skryptu- a i ładniej wygląda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ale tak to klasa ok (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #95





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dzieki za wykrycie buga (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Po prostu link o x do tylu, gdy stron jest mniej niz x, nie powinien sie wogle pojawiac. Moje niedopatrzenie (musialem w wersji 2.0 to jakos skaszanic, bo w 1.0 bylo raczej ok). W poniedzialek to poprawie, gdyz teraz siedze przy kompie bez php.

Ale jak zauwazyliscie, wyswietli sie prawilowa strona. Jest to zabezpieczenie, jakby ktos z palca wpisal zla strone (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit:
ok, to jest poprawka. znajduje sie w pakiecie v2.02.
Bug dotyczyl tylko sytuacji, gdy ustawiony byl "smart" Render, czyli ze aktualna strona byla po srodku. W normalnym renderowaniu bylo ok.
Go to the top of the page
+Quote Post
tomkoz11
post
Post #96





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 16.03.2006

Ostrzeżenie: (0%)
-----


Świetna klasa nospor! Wielkie dzięki - działa o wiele szybciej od mojego dotychczasowego sposobu stronnicowania. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pozdrawiam

Ten post edytował tomkoz11 18.11.2006, 09:54:50
Go to the top of the page
+Quote Post
czerwony2
post
Post #97





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 29.11.2006

Ostrzeżenie: (0%)
-----


Mam pytanie:
Jak powinien wyglądać prawidłowo konstruktor dla klasy która korzysta do przechodzenia do kolejnych stron z zewnętrznego formularza . Nospor pisze w pierwszym poscie że trzeba podać pierwszy i trzeci argument. Rozumiem ze w pierwszym ma być unikalne idPagera, w trzecim idFormularza (czyli np $ile) a co mam w takim razie wpisać w drugim, bo przecież nie można go ominąć??

  1. <?php
  2. $pager = new Pager('idPagera', 'co tutaj?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?', '$ile');
  3. ?>



Mój problem polega na tym że po przekazaniu do klasy liczby rekordów na stronie jaką ma wyświetlać za pomocą:

  1. <?php
  2. $pager->SetRecordsPerPage($ile);
  3. ?>


(gdzie $ile to liczba rekordów na stronie pobrana z formularz)

jest wszytko ok alo po naciśnięciu np. linka wygenerowanego przez pagera do np.drugiej strony wszystko się sypie. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Rozumiem że trzeba utrzymać liczbę zmiennej $ile np. wysłać ją w linku metodą get a do tego trzeba właściwie skonstruować konstruktora tak?

Jak to powinno wygadać??


Motam się z tym pagerem od paru dni i już się gubię w tym wszystkim (dodam jeszcze ze jestem początkujący).
Go to the top of the page
+Quote Post
nospor
post
Post #98





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Widze ze korzystasz ze starej wersji, 1.0, bo w wyzszych juz konstruktor nie ma 3 parametrow (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat
a co mam w takim razie wpisać w drugim, bo przecież nie można go ominąć??
wartosc domyslna, czyli ''. a najlepiej przejdz na wersje nr 2 i przejrzyj dołączone do niej przyklady.

pozatym:
  1. <?php
  2. $pager = new Pager('idPagera', '', '$ile');
  3. ?>
tak sie nie wstawia zmiennych '$ile', powiino byc:
  1. <?php
  2. $pager = new Pager('idPagera', '', $ile);
  3. ?>

i czemu u ciebie nazwa forma jest zmienna?

Cytat
dodam jeszcze ze jestem początkujący
Tego nie musiales dodawac (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
czerwony2
post
Post #99





Grupa: Zarejestrowani
Postów: 12
Pomógł: 1
Dołączył: 29.11.2006

Ostrzeżenie: (0%)
-----


OK trochę posiedziałem, ale udało mi się zrobić to co chciałem - uczymy się na błędach (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Nieśmiało wydaje mi się że znalazłem małą skazę wizualną tzn. o jeden za dużo separator ($sep) między ostatnim indeksem numerycznym a > (Następna strona) co powoduje większą przerwę niż między innymi indeksami pegera. W kodzie jest to linia 382 dla PHP4 wersji pegera v2.02 i 405 dla PHP5.

Pozdrawiam

Ten post edytował czerwony2 30.12.2006, 03:41:52
Go to the top of the page
+Quote Post
nospor
post
Post #100





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nieśmiało wydaje mi się że znalazłem małą skazę wizualną tzn. o jeden za dużo separator ($sep) między ostatnim indeksem numerycznym a > (Następna strona)
A faktycznie. Dzieki za cynk (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

12 Stron V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.08.2025 - 20:32